package com.brsya.movie.util;

import android.app.DownloadManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.net.Uri;
import android.os.Build;

import androidx.core.content.FileProvider;


import com.brsya.base.util.LoggerUtil;
import com.brsya.movie.BuildConfig;

import java.io.File;



/**
 * FileName: GeneralUtil
 * Author: brsya
 * Date: 2020/11/10 11:23
 * Description: 常用工具
 */
public class GeneralUtil {
//    /**
//     * 获取安装App(支持7.0)的意图
//     *
//     * @param context
//     * @param filePath
//     * @return
//     */
//    public static Intent getInstallAppIntent(Context context, String filePath) {
        //apk文件的本地路径
//        File apkfile = new File(filePath);
//        if (!apkfile.exists()) {
//            return null;
//        }
//        Intent intent = new Intent(Intent.ACTION_VIEW);
//        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri contentUri = getUriForFile(context, apkfile);
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//        }
//        intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
//        return intent;
//    }

    /**
     * 打开应用设置页面
     *
     * @param context 上下文
     */
    public static void toSelfSetting(Context context) {
        Intent mIntent = new Intent();
        mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
        mIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
        context.startActivity(mIntent);
    }


    /**
     * 检查包是否存在
     *
     * @param packname
     * @return
     */
    public static boolean checkPackInfo(Context context, String packname) {
        PackageInfo packageInfo = null;
        try {
            packageInfo = context.getPackageManager().getPackageInfo(packname, 0);
        } catch (Exception e) {
            LoggerUtil.w("包未安装");
        }
        return packageInfo != null;
    }

    /**
     * 根据包名打开app
     *
     * @param context  context
     * @param packName 包名
     */
    public static void openAppByPackName(Context context, String packName) {
        if (!checkPackInfo(context, packName)) {
            return;
        }
        Intent intent = context.getPackageManager().getLaunchIntentForPackage(packName);
        context.startActivity(intent);
    }

    /**
     * 进入应用市场详情页
     */
    public static void gotoMarket(Context context, String packName) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("market://details?id=" + packName));
        // 某些老手机会因为找不到任何市场而报错
        try {
            context.startActivity(intent);
        } catch (Exception e) {
            LoggerUtil.e("打开应用市场失败");
        }
    }

    /**
     * 获取安装App(支持7.0)的意图
     *
     * @param context
     * @param filePath
     * @return
     */
    public static Intent getInstallAppIntent(Context context, String filePath) {
        //apk文件的本地路径
        File apkfile = new File(filePath);
        if (!apkfile.exists()) {
            return null;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri contentUri = getUriForFile(context, apkfile);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        }
        intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        return intent;
    }


    /**
     * 将文件转换成uri(支持7.0)
     *
     * @param mContext
     * @param file
     * @return
     */
    public static Uri getUriForFile(Context mContext, File file) {
        Uri fileUri = null;
        if (Build.VERSION.SDK_INT >= 24) {
            fileUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".fileProvider", file);
            mContext.grantUriPermission(
                    BuildConfig.APPLICATION_ID,
                    Uri.parse(file.getAbsolutePath()),
                    Intent.FLAG_GRANT_READ_URI_PERMISSION
            );
        } else {
            fileUri = Uri.fromFile(file);
        }
        return fileUri;
    }


    /**
     * 调用系统下载
     */
    public static long downloadBySystem(Context context, String url) {
        // 指定下载地址
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        // 允许媒体扫描，根据下载的文件类型被加入相册、音乐等媒体库
        request.allowScanningByMediaScanner();
        // 设置通知的显示类型，下载进行时和完成后显示通知
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        // 设置通知栏的标题，如果不设置，默认使用文件名
//        request.setTitle("This is title");
        // 设置通知栏的描述
//        request.setDescription("This is description");
        // 允许在计费流量下下载
        request.setAllowedOverMetered(false);
        // 允许该记录在下载管理界面可见
        request.setVisibleInDownloadsUi(false);
        // 允许漫游时下载
        request.setAllowedOverRoaming(true);
        // 允许下载的网路类型
        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
        // 设置下载文件保存的路径和文件名
//        String fileName  = GeneralUtil.getSavePathByUrl(url);
//        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
//        另外可选一下方法，自定义下载路径
//        request.setDestinationUri()
//        request.setDestinationInExternalFilesDir()
        final DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        // 添加一个下载任务
        return downloadManager.enqueue(request);
    }
}
